iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

研究visual studio+MSSQL各項技術系列 第 26

MSSQL暫存資料表、with as (CTE)介紹

  • 分享至 

  • xImage
  •  

一、暫存資料表
微軟關於暫存資料表的教學連結
暫存資料表簡單地說就是一種資料表,關閉服務資料會消失,能用於暫時存放運算後的資料。
這邊介紹一下它的相關語法:
新增暫存資料表,暫存資料表要加上#,這裡用teacher資料表作為範例:

Create Table #teacher(
id int,
name varchar(20),
sex int,
class varchar(3),
subject varchar(20)
)

新增一筆資料:
刪除與修改基本上與上一章節提到的語法大致相同,就不一一說明

INSERT INTO #teacher (id, name, sex, class, subject)
 VALUES (1, 'Ben', 1, 'B', 'English')

刪除暫存資料表

DROP TABLE #teacher

實際上可能會用到以下的例子:
本例要先建置student資料表
Object_id這行是判斷如果已有暫存表就刪掉
再用子查詢查出A班老師的學生有那些

IF Object_id('tempdb..#teacher') IS NOT NULL
BEGIN
      DROP TABLE #teacher
END

Create Table #teacher(
id int,
name varchar(20),
sex int,
class varchar(3),
subject varchar(20)
)

INSERT INTO #teacher (id, name, sex, class, subject)
 VALUES (1, 'Ben', 1, 'B', 'English')

INSERT INTO #teacher (id, name, sex, class, subject)
 VALUES (2, 'Seren', 1, 'C', 'Math')

INSERT INTO #teacher (id, name, sex, class, subject)
 VALUES (3, 'Alice', 2, 'A', 'Chinese')

--使用暫存table,查詢A班老師的學生有那些
select student.class, student.name from student
where student.class in (select class from #teacher where #teacher.name = 'Alice')

https://ithelp.ithome.com.tw/upload/images/20231011/20163340drwAJITxBY.png

二、CTE (Common Table Expression) CTE 是一個「暫存」且「具名」的結果集合。可以用來取代子查詢,能讓程式碼變得容易閱讀。
測試語法如下,join查詢可以換成以下查詢:

with t1 as
(
    select class from #teacher where #teacher.name = 'Alice'
)
select student.class, student.name from student 
where student.class in (select * from t1)

以下是查詢結果,可以看到與一的查詢結果相同,程式碼也比較容易閱讀
https://ithelp.ithome.com.tw/upload/images/20231011/20163340BNZHqezYOD.png

這個CTE查詢後面也可以逗點加入其他的CTE,但只能使用一個with,例如以下的例子
with t1 as
(
select class from tabel1
),
(
select class from tabel2
)
select...同上

本文主要是簡單介紹暫存表與CTE,就先寫到這邊


上一篇
MSSQL資料表操作語法教學- Create 、Insert、Update、Delete、Drop
下一篇
MSSQL 預存程序(stored Procedure) - 新增、修改預存程序、預存程序傳入參數
系列文
研究visual studio+MSSQL各項技術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言